package cn.iocoder.yudao.module.liveprice.api;

import cn.iocoder.yudao.module.liveprice.api.dto.LivePriceRespDTO;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 查询
 */
public interface LivePriceApi {
    /**
     * 获取实时价格列表
     * @return
     */
    List<LivePriceRespDTO> getLivePriceList();

    /**
     * 根据类型获取时价
     * @return
     */
    LivePriceRespDTO getLivePriceByType();

    /**
     * 获取时价历史
     * @return
     */
    List<LivePriceRespDTO> getHistory();

    /**
     * 异步缓存单个价格数据
     * @param data 价格数据
     */
    void asyncCachePriceData(LivePriceRespDTO data);

    /**
     * 异步批量缓存价格数据
     * @param dataList 价格数据列表
     */
    void asyncBatchCachePriceData(List<LivePriceRespDTO> dataList);

    /**
     * 从缓存中获取单个金属价格
     * @param metalType 金属类型
     * @return 价格数据
     */
    LivePriceRespDTO getMetalPriceFromCache(Integer metalType);

    /**
     * 批量从缓存中获取金属价格
     * @param metalTypes 金属类型列表
     * @return 价格数据映射
     */
    Map<Integer, LivePriceRespDTO> batchGetMetalPriceFromCache(List<Integer> metalTypes);

    /**
     * 获取配置价格
     * @param metalType 金属类型
     * @param sale 是否销售价格
     * @return 价格
     */
    BigDecimal getConfPrice(Integer metalType, boolean sale);
}
